//
//  HMEmoticonTools.swift
//  CZWeibo31
//
//  Created by apple on 16/8/19.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit
// 最多显示的列数 和 行数 和最多显示表情个数
let HMEmoticonsMaxCol = 7
let HMEmoticonsMaxRow = 3
let HMEmoticonsMaxCount = HMEmoticonsMaxCol*HMEmoticonsMaxRow - 1

class HMEmoticonTools: NSObject {
    
    // 全局访问点
    static let sharedTools: HMEmoticonTools = HMEmoticonTools()
    
    // 读取bundle文件
    lazy var emoticonsBundle: NSBundle = {
        // 路径
        let path = NSBundle.mainBundle().pathForResource("Emoticons.bundle", ofType: nil)!
        return NSBundle(path: path)!
    }()
    
    // 默认表情一维数组
    lazy var defaultEmoticons: [HMEmoticonModel] = {
        return self.getEmoticonsWithPath("default")
    }()

    // emoji表情一维数组
    lazy var emojiEmoticons: [HMEmoticonModel] = {
        return self.getEmoticonsWithPath("emoji")
    }()
    
    // 浪小花表情一维数组
    lazy var lxhEmoticons: [HMEmoticonModel] = {
        return self.getEmoticonsWithPath("lxh")
    }()
    
    // 三维数组
    lazy var allEmoticons: [[[HMEmoticonModel]]] = {
        return [
            self.getEmotionsGroupsWithEmoticons(self.defaultEmoticons),
            self.getEmotionsGroupsWithEmoticons(self.emojiEmoticons),
            self.getEmotionsGroupsWithEmoticons(self.lxhEmoticons)
        ]
    }()
    
    // 一维数组转二维数组
    /*
    - 如何生成一个二维数组
    */
    func getEmotionsGroupsWithEmoticons(emoticons: [HMEmoticonModel]) -> [[HMEmoticonModel]]{
        // 获取最多显示的页数
        let pageCount = (emoticons.count + HMEmoticonsMaxCount - 1)/HMEmoticonsMaxCount
        // 创建一个可变的二维临时数组
        var tempArray:[[HMEmoticonModel]] = [[HMEmoticonModel]]()
        // 遍历页数
        for i in 0..<pageCount {
            let location = i*HMEmoticonsMaxCount
            var length = HMEmoticonsMaxCount
            // 由于默认表情为108哥  遍历到最后一组 [100,20] 而我们只有 到[100,8]
            if location + length > emoticons.count {
                length = emoticons.count - location
            }
            // 范围
            let range = NSRange(location: location, length: length)
            // 数组截取
            let array = (emoticons as NSArray).subarrayWithRange(range) as![HMEmoticonModel]
            // 添加一维数组
            tempArray.append(array)
        }
        return tempArray
    }
    
    
    // 读取plist文件 得到一维数组
    func getEmoticonsWithPath(path: String)-> [HMEmoticonModel] {
        let file = emoticonsBundle.pathForResource("\(path)/info.plist", ofType: nil)!
        let array = NSArray(contentsOfFile: file)!
        // 创建一个临时可变数组
        var tempArray:[HMEmoticonModel] = [HMEmoticonModel]()
        // 遍历数组 字典转模型
        for dic in array {
            // 创建一个模型
            let model = HMEmoticonModel(dict: dic as! [String: AnyObject])
            // 设置路径
            model.path = "\(path)/"
            // 添加模型到数组中
            tempArray.append(model)
        }
        return tempArray
    }
    
    // 遍历当前默认表情的一维数组 或者 浪小花的一维数组
    func searchEmoticonInDefaultEmotionsOrLxhEmoticons(chs: String) -> HMEmoticonModel?{
        // 遍历默认表情
        for emoticonModel in defaultEmoticons {
            // 判断外界传入的chs 和 当前的chs 是否相等
            if emoticonModel.chs == chs {
                return emoticonModel
            }
        }
        
        // 遍历浪小花表情
        for emoticonModel in lxhEmoticons {
            // 判断外界传入的chs 和 当前的chs 是否相等
            if emoticonModel.chs == chs {
                return emoticonModel
            }
        }
        // 代表没有该模型
        return nil
    }
   
}
